在 Java 中,类的属性、代码块、构造器和静态代码块的初始化顺序

您所在的位置:网站首页 java 实例化 初始化 在 Java 中,类的属性、代码块、构造器和静态代码块的初始化顺序

在 Java 中,类的属性、代码块、构造器和静态代码块的初始化顺序

2023-06-04 14:20| 来源: 网络整理| 查看: 265

静态属性声明时初始化。 父类的静态代码块按照它们在源代码中出现的顺序执行。 子类的静态代码块按照它们在源代码中出现的顺序执行。 父类的实例变量按照它们在源代码中出现的顺序初始化。 父类的代码块按照它们在源代码中出现的顺序执行。 父类的构造器。 子类的实例变量按照它们在源代码中出现的顺序初始化。 子类的代码块按照它们在源代码中出现的顺序执行。 子类的构造器。 需要注意的是,静态属性、静态代码块和实例变量都会在对象创建之前进行初始化,因此它们的初始化顺序是在对象创建之前确定的。而代码块和构造器则是在对象创建时执行的,并且它们的执行顺序是按照它们在源代码中出现的顺序执行的。

下面是一个 Java 代码示例,说明这些执行顺序:

public class Parent { private static String parentStaticField = log("1. parent static field initialization");//1,父类静态属性 private String parentField = log("5. parent field initialization");//5,父类实例变量 static { //2,父类静态代码块 log("2. parent static block execution"); } { log("6. parent block execution");//6,父类代码块 } public Parent() { log("7. parent constructor execution");//7,父类构造器 } private static String log(String message) { System.out.println(message); return ""; } } public class Child extends Parent { private static String childStaticField = log("3. child static field initialization");//3,子类静态属性 //8,子类实例变量 private String childField = log("8. child field initialization"); static { //子类静态代码块 log("4. child static block execution"); } { //子类代码块 log("9. child block execution"); } public Child() { //10,子类构造方法 log("10. child constructor execution"); } } public class Main { public static void main(String[] args) { new Child(); } }

在这个例子中,我们定义了一个 Parent 类和一个继承自 Parent 的 Child 类,并且在它们的属性、代码块和构造器中输出了日志。在 Main 类的 main() 方法中创建了一个 Child 对象。

当程序执行时,输出的日志如下所示:

1. parent static field initialization 2. parent static block execution 3. child static field initialization 4. parent field initialization 5. parent block execution 6. parent constructor execution 7. child static field initialization 8. child static block execution 9. child field initialization 10. child field initialization 11. child block execution 12. child constructor execution

可以看到,按照上述顺序,先初始化父类的静态属性,然后执行父类的静态代码块。接着初始化子类的静态属性、子类的静态代码块,然后初始化父类的实例变量和代码块,并执行父类的构造器。最后初始化子类的实例变量和代码块,并执行子类的构造器。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3